<template>
	<default-header-page-layout ref="page" title="入库作业" >
		<view class="page-frame with-action-user-row" :style="{height:pageBodyHeight+'px'}" v-if="pageBodyHeight">
			<action-user-row />
			<view class="with-action-user-row-page-content">
				<scan-input-form-item
					class="forma-item"
					label="批次号"
					v-model="form.orderNo"
					:msg="msg.orderNo"
					:msg-type="msgType.orderNo"
					@search="onSearchOrderNo"
					@clear="onClearOrderNo"
				/>
				
				<template v-if="materialObj.id">
					<view class="material-block">
						<view class="material-block-item">
							<view class="label">批次号：</view>
							<view class="content auto-wrap">{{materialObj.batch}}</view>
						</view>
						<view class="material-block-item">
							<view class="label auto-wrap">流水号：</view>
							<view class="content">
								<input class="easy-input" v-model="materialObj.serialNo" />
							</view>
						</view>
						<view class="material-block-item">
							<view class="label">长：</view>
							<view class="content auto-wrap">{{materialObj.long}}</view>
						</view>
						<view class="material-block-item">
							<view class="label">宽：</view>
							<view class="content auto-wrap">{{materialObj.wide}}</view>
						</view>
						<view class="material-block-item">
							<view class="label">高：</view>
							<view class="content auto-wrap">{{materialObj.high}}</view>
						</view>
					</view>
					
					<easy-select-form-item 
						label="入库口"
						v-model="form.entranceId"
						:msg="msg.entranceId"
						:msg-type="msgType.entranceId"
						:list="selectList.entrances"
						value-field="code"
						label-field="name"
						:clearable="false"
					/>
				</template>
				
			</view>
			
		</view>
		<template v-slot:footer>
			<view class="bottom-btns-row">
				<u-button type="primary" text="提交入库" :disabled="confirmBtnDisabled" @click="onSubmit"></u-button>
			</view>
		</template>
	</default-header-page-layout>
</template>

<script>
import DefaultHeaderPageLayout from '@/components/DefaultHeaderPageLayout.vue'
import ActionUserRow from '@/components/ActionUserRow.vue'
import ScanInputFormItem from '@/components/ScanInputFormItem.vue'
import EasySelectFormItem from '@/components/EasySelectFormItem.vue'
import { $alert, $successInfo, regexValidate } from '@/static/js/utils/index.js'
let initInterVal = null;
const defaultForm = {
	orderNo:'',
	entranceId:''
}
export default {
	name:'fapaoInStorePage',
	components:{DefaultHeaderPageLayout,ActionUserRow,ScanInputFormItem,EasySelectFormItem},
	data(){
		return {
			pageBodyHeight:0,
			step:1,
			form:{...defaultForm},
			msg:{
				orderNo:'',
				entranceId:''
			},
			msgType:{
				orderNo:'error',
				entranceId:'error'
			},
			materialObj:{},
			selectList:{
				entrances:[]
			}
		}
	},
	computed:{
		confirmBtnDisabled(){
			let res = true;
			if (this.materialObj.id && this.form.entranceId) {
				res = false
			}
			return res;
		}
	},
	methods:{
		/* 单据编号搜索 */
		onSearchOrderNo(){
			if (!this.form.orderNo) {
			  this.msg.orderNo = '请输入批次号！';
			  return false;
			}
			this.msg.orderNo = '';
			this.getSearchInfo()
		},
		/* 清除单据编号 */
		onClearOrderNo(){
			this.resetOrderNo()
		},
		/* 清除单据编号信息 */
		resetOrderNo(){
		  this.msg.orderNo = '';
		  this.form.orderNo = ''
		  this.materialObj = {};
		  this.form.entranceId = null
		},
		getSelectOptions(callback){
			this.$api.get('PdaGetWarehouseEntrance',{Id:this.materialObj.id},{block:'fapaoIn',loading:false}).then(d=>{
				this.selectList.entrances = d.outEntranceListOutputList || []
				this.form.entranceId = d.defaultCode
				callback && callback(true)
			}).catch((errmsg)=>{
				callback && callback(false,errmsg)
			})
		},
		getSearchInfo(callback,needloding=true){
			if (needloding) {
				uni.showLoading({
					title: '加载中...',
					mask:true
				});
			}
			this.getInMaterilaInfo((f,msg1)=>{
				if (f){
					this.getSelectOptions((fx,msg2)=>{
						if (needloding) {
							uni.hideLoading();
							if (!fx) {
								$alert(msg2)
							}
						}
						callback && callback(fx,msg2)
					})
				} else {
					if (needloding) {
						uni.hideLoading();
						$alert(msg1)
					}
					callback && callback(false,msg1)
				}
			})
		},
		/* 获取入库物料信息 */
		getInMaterilaInfo(callback){
			let params = {Batch:this.form.orderNo}
			this.$api.get('GetDetail',params,{block:'fapaoIn',loading:false,warn:false}).then((d)=>{
				this.materialObj = d
				callback && callback(true)
			}).catch((_errmsg)=>{
				this.resetOrderNo()
				callback && callback(false,_errmsg)
			})
		},
		inputCheck(){
			let res = true, msg = '';
			if (!this.materialObj.serialNo) {
				msg = '请输入流水号';
				res = false
			}
			
			if (res && !regexValidate.positiveInteger(this.materialObj.serialNo)) {
				msg = '请输入只能是正整数';
				res = false
			}
			
			if (res && Number(this.materialObj.serialNo)<=0) {
				msg = '请输入只能是正整数';
				res = false
			}
			
			if (!res) {
				$alert(msg)
			}
			
			return res;
		},
		/* 响应提交按钮 */
		onSubmit(){
			if (!this.inputCheck()) return false;
			uni.showLoading({
				title: '加载中...',
				mask:true
			});
			this.dealConfirm((f,_errmsg1)=>{
				if (f) {
					setTimeout(()=>{
						this.getSearchInfo((fx,_errmsg2)=>{
							uni.hideLoading();
							if (fx) {
								$successInfo('入库成功')
							} else {
								$alert(`入库成功，但：${_errmsg2}`)
							}
						},false)
					},5000)
				} else {
					uni.hideLoading();
					$alert(_errmsg1)
				}
			})
		},
		/* 提交接口调用 */
		dealConfirm(callback){
			let params = {
				batch:this.materialObj.batch,
			  serialNo:this.materialObj.serialNo,
			  entranceCode:this.form.entranceId
			}
			this.$api.post('FoamingPdaAutomaticWarehouse',params,{block:'fapaoIn',loading:false,warn:false}).then(()=>{
				callback && callback(true)
			}).catch((e)=>{
				callback && callback(false,e)
			})
		},
		/* 页面初始化获取页面body高度的定时器 */
		startInitInterval(callback){
			initInterVal = setInterval(()=>{
				if (this.pageBodyHeight) {
					this.clearInitInterval()
					callback && callback()
				} else {
					this.pageBodyHeight = this.$refs.page.getBodyHeight()
				}
			},200)
		},
		/* 清除定时器 */
		clearInitInterval(){
			try{
				clearInterval(initInterVal)
				initInterVal = null
			}catch(e){
				//TODO handle the exception
			}
		}
	},
	onReady(){
		this.startInitInterval(()=>{
			/* 页面初始化后需要执行的代码在这边调用 */
		})
	},
	onUnload(){
		this.clearInitInterval()
	}
}
</script>

<style scoped lang="scss">
.bottom-btns-row{
	padding: 10rpx;
	background-color: $uni-bg-color;
}
.forma-item{
	margin-bottom: 24rpx;
}
.material-block{
	background-color: $uni-bg-color;
	padding: 8rpx 16rpx;
	font-size: 1.1em;
	margin-bottom: 24rpx;
	border-width: 2rpx 0;
	border-style: solid;
	border-color: $uni-border-color;
	.material-block-item{
		border-bottom: 2rpx dashed $uni-text-color-grey;
		display: flex;
		&>.label{
			opacity: .7;
			flex-shrink: 0;
			width: 130rpx;
			text-align: right;
			padding-top: 11rpx;
		}
		&>.content{
			width: 1px;
			flex-grow: 1;
			line-height: 1.5em;
			padding: 8rpx 0;
		}
		&:last-child{
			border-bottom: 0;
		}
	}
	.easy-input{
		font-size: inherit;
		color: $uni-color-primary;
		text-decoration: underline;
	}
}
</style>